在 上一篇 是用YAZ軟體工具來查詢資料,
本篇則從程式的方式來抓取 Z39.50 的資料。
在ruby環境下可安裝 Zoom 的套件,
ruby 的 1.8.x版本可順利安裝,
但 1.9.x 版本似乎無法順利安裝。
執行查詢看看會是怎樣:
$ irb -rzoom
>> rset = ''
=> ""
>> ZOOM::Connection.open('192.83.186.170:210/INNOPAC') do |conn|
?> rset = conn.search("@attr 1=4 國際觀的第一本書")
>> end
=> nil
>> rset.size
=> 6
以書名查,可獲得一陣列,
也就是查到有六筆:
看看第一筆的內容是什麼?
>> p rset[0]
01127cam2 2200385 4500
001 001968364
005 20090806115603.0
008 chi
010 0 $a 9789861341163 $b 平裝 $d NT$360
020 $a tw $b 97013120
042 $a nbic
042 $a nbi9808aa01
050 $a 001968364
100 $a 20080828d2008 k y0chiy08 e.
101 0 $a chi.
102 $a tw.
105 $a a z 000yy.
200 1 $a 國際觀的第一本書 $e 看世界的方法 $f 劉必榮著
205 $a 初版
210 $a [臺北市] $c 先覺出版 $c 叩應公司經銷 $d 2008.09.
215 0 $a 318面 $c 圖, 地圖 $d 21公分
225 2 $a 社會觀察 $v 28.
260 1 $a 2008.
320 $a 含索引
410 0 $1 2001 $a 社會觀察 $v 28.
517 1 $a 看世界的方法 $z chi.
606 $a 國際政治 $2 cst.
606 $a 國際經濟 $2 cst.
606 $a 國際關係 $2 cst.
681 $a 578 $b 8756.
700 1 $a 劉 $b 必榮
801 0 $a tw $b CIP $c 20080709 $g CCR.
801 1 $a tw $b CIP $c 20080709 $g CCR.
801 2 $a tw $b 國圖 $c 20090806 $g CCR.
805 $a NCL $d 578 $e 8756 $c 003764360 $t CCL $w n $x n $z 681.
這就是所謂的MARC、機讀編目格式,
如何去讀取各欄的值呢?
可以透過 rset[0].xml 把marc轉為XML的格式,
然後再用可以parse XML的工具就可抓取所需的欄位。
require 'hpricot'
doc = Hpricot::XML(rset[0].xml)
# 抓取 ISBN
doc.at("[@tag='010']//[@code='a']").innerText
# 抓取 書名
doc.at("[@tag='200']//[@code='a']").innerText
MARC格式對程式處理而言,
似乎比較麻煩,
而轉成XML格式,雖多一道手續,
但從現有的工具存取,
卻相對地更容易些。